PTRACE的权限检查,自由是有前提的~

系统调用PTRACE的一切开始于这里: COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,                compat_long_t, addr, compat_long_t, data) 首先提供了attach的绿色通道: if (request == PTRACE_ATTACH || request == PTRACE_SEIZE) {         ret = ptrace_attach(child, request, addr, data); attach做的事情就是把当前进程变成了被trace进程的父进程,同时把被trace进程加入到当前进程的ptraced链表中; __ptrace_link(task, current); list_add(&child->ptrace_entry, &new_parent->ptraced);     child->parent = new_parent; 但是这样做是有前提的,具体请看后面的分析,这里先按下不表。 attach?wtf?为啥要在用之前attach,搞得这么神秘,难道直接用不可以吗? 不可以,因为你不能直接访问其他进程的地址空间,否则地址空间的隔离不就变成笑话了。 所以这个ptrace系统调用入口做了个很重要的check: ret = ptrace_check_attach(child, request … Continue reading PTRACE的权限检查,自由是有前提的~